Introduction

Some text for introduction to this survey and results.

Results

Data Preparation

Student survey has been conducted for 2 weeks and received 51 total reponses.

Load all required libraries that will be used throughout this analysis.

library(plyr)
library(psych)
library(plotly)

Start reading both CSV files, from student survey and speedtest result.

csv_surv <- read.csv('Student_Survey.csv')
csv_test <- read.csv('Speedtest_Result.csv')

Rename variables name to something more meaningful, shorter and easier to code.

tmpstud <- plyr::rename(csv_surv, c(Academic.Programme = "Programme", Internet.Connection.Method = "SSID", Main.Usage.of.Internet = "Usage", On.overall.basis..how.satisfied.are.you.with.wireless.internet.connection.provided.by.IIUM. = "Satisfaction", Propose.a.solution.to.improve.IIUM.WIFI.services. = "Comment", Average.Duration.of.Daily.Use.of.Internet = "Duration", How.many.times.have.your.Internet.connection.been.suddenly.disconnected.or.face.intermittent.connection.in.past.3.days. = "Disconnected", Is.WiFi.coverage.adequate.and.within.acceptable.signal.strength. = "Coverage", How.satisfied.are.you.with.the.network.speed.to.achieve.your.main.usages. = "Speed"))
tmptest <- plyr::rename(csv_test, c(Submission.Date = "Timestamp", WiFi.SSID = "SSID", Download.Speed..Mbps. = "DLSpeed", Download.Size..MB. = "DLSize", Upload.Speed..Mbps. = "UPSpeed", Upload.Size..MB. = "UPSize", Ping..ms. = "Ping", Jitter..ms. = "Jitter", Loss.... = "Loss", Signal.Strength..dBm. = "Signal"))

Perform data cleansing

tmpstud <- tmpstud[which(tmpstud$Gender == ''), ]
tmpstud$Timestamp <- tmpstud$Gender <- tmpstud$Comment <- NULL
tmpstud$Usage[7] <- "Study and assignment, Topic and subject research, Casual browsing"
tmpstud$Usage <- strsplit(as.character(tmpstud$Usage), ",")

Split Usage into list and transpose into dataframe

k <- 1
Respondent <- integer()
Programme <- character()
SSID <- character()
Mahallah <- character()
Usage <- character()
Satisfaction <- integer()
Duration <- character()
Speed <- integer()
Disconnected <- character()
Coverage <- character()
for(i in 1:nrow(tmpstud))
{
  for(j in 1:3)
  {
    Respondent[k] <- i # to identify unique number of respondent
    Programme[k] <- as.character(tmpstud$Programme[i])
    SSID[k] <- as.character(tmpstud$SSID[i])
    Mahallah[k] <- as.character(tmpstud$Mahallah[i])
    Usage[k] <- trimws(tmpstud$Usage[[i]][j]) # trim leading and trailing whitespace
    Satisfaction[k] <- tmpstud$Satisfaction[i]
    Duration[k] <- as.character(tmpstud$Duration[i])
    Speed[k] <- tmpstud$Speed[i]
    Disconnected[k] <- as.character(tmpstud$Disconnected[i])
    Coverage[k] <- as.character(tmpstud$Coverage[i])
    
    k <- k + 1
  }
}

Finalized dataframe from previous step

dfstud <- data.frame(Respondent, Programme, SSID, Mahallah, Usage, Satisfaction, Duration, Speed, Disconnected, Coverage, stringsAsFactors = FALSE)

Overall Level of Satisfaction

Bar graph for overall satisfaction

dfsatisfaction <- count(unique(dfstud[, c(1,6)])[, 2])
dfsatisfaction$x[dfsatisfaction$x == 1] <- "Very Dissatisfied"
dfsatisfaction$x[dfsatisfaction$x == 2] <- "Dissatisfied"
dfsatisfaction$x[dfsatisfaction$x == 3] <- "Satisfied"
dfsatisfaction$x[dfsatisfaction$x == 4] <- "Very Satisfied"
plot_ly(x = dfsatisfaction$x, y = dfsatisfaction$freq, type = "bar") %>%
layout(title = 'Overall Level of Satisfaction', yaxis = list(title = "Respondent"), xaxis = list(title = "Satisfaction Level"))
LS0tDQp0aXRsZTogIklJVU0gV2lmaSBRdWFsaXR5IFN1cnZlcnkiDQphdXRob3I6ICJLaGFpcnVsIEZhdGhpIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRvYzogeWVzDQotLS0NCg0KIyBJbnRyb2R1Y3Rpb24NCg0KU29tZSB0ZXh0IGZvciBpbnRyb2R1Y3Rpb24gdG8gdGhpcyBzdXJ2ZXkgYW5kIHJlc3VsdHMuDQoNCg0KIyBSZXN1bHRzDQoNCiMjIERhdGEgUHJlcGFyYXRpb24NCg0KU3R1ZGVudCBzdXJ2ZXkgaGFzIGJlZW4gY29uZHVjdGVkIGZvciAyIHdlZWtzIGFuZCByZWNlaXZlZCA1MSB0b3RhbCByZXBvbnNlcy4NCg0KTG9hZCBhbGwgcmVxdWlyZWQgbGlicmFyaWVzIHRoYXQgd2lsbCBiZSB1c2VkIHRocm91Z2hvdXQgdGhpcyBhbmFseXNpcy4NCmBgYHtyIExpYnJhcnksIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KbGlicmFyeShwbHlyKQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkocGxvdGx5KQ0KYGBgDQoNClN0YXJ0IHJlYWRpbmcgYm90aCBDU1YgZmlsZXMsIGZyb20gc3R1ZGVudCBzdXJ2ZXkgYW5kIHNwZWVkdGVzdCByZXN1bHQuDQpgYGB7ciBSZWFkQ1NWLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCmNzdl9zdXJ2IDwtIHJlYWQuY3N2KCdTdHVkZW50X1N1cnZleS5jc3YnKQ0KY3N2X3Rlc3QgPC0gcmVhZC5jc3YoJ1NwZWVkdGVzdF9SZXN1bHQuY3N2JykNCmBgYA0KDQoNClJlbmFtZSB2YXJpYWJsZXMgbmFtZSB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsLCBzaG9ydGVyIGFuZCBlYXNpZXIgdG8gY29kZS4NCmBgYHtyIERhdGFQcmVwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCnRtcHN0dWQgPC0gcGx5cjo6cmVuYW1lKGNzdl9zdXJ2LCBjKEFjYWRlbWljLlByb2dyYW1tZSA9ICJQcm9ncmFtbWUiLCBJbnRlcm5ldC5Db25uZWN0aW9uLk1ldGhvZCA9ICJTU0lEIiwgTWFpbi5Vc2FnZS5vZi5JbnRlcm5ldCA9ICJVc2FnZSIsIE9uLm92ZXJhbGwuYmFzaXMuLmhvdy5zYXRpc2ZpZWQuYXJlLnlvdS53aXRoLndpcmVsZXNzLmludGVybmV0LmNvbm5lY3Rpb24ucHJvdmlkZWQuYnkuSUlVTS4gPSAiU2F0aXNmYWN0aW9uIiwgUHJvcG9zZS5hLnNvbHV0aW9uLnRvLmltcHJvdmUuSUlVTS5XSUZJLnNlcnZpY2VzLiA9ICJDb21tZW50IiwgQXZlcmFnZS5EdXJhdGlvbi5vZi5EYWlseS5Vc2Uub2YuSW50ZXJuZXQgPSAiRHVyYXRpb24iLCBIb3cubWFueS50aW1lcy5oYXZlLnlvdXIuSW50ZXJuZXQuY29ubmVjdGlvbi5iZWVuLnN1ZGRlbmx5LmRpc2Nvbm5lY3RlZC5vci5mYWNlLmludGVybWl0dGVudC5jb25uZWN0aW9uLmluLnBhc3QuMy5kYXlzLiA9ICJEaXNjb25uZWN0ZWQiLCBJcy5XaUZpLmNvdmVyYWdlLmFkZXF1YXRlLmFuZC53aXRoaW4uYWNjZXB0YWJsZS5zaWduYWwuc3RyZW5ndGguID0gIkNvdmVyYWdlIiwgSG93LnNhdGlzZmllZC5hcmUueW91LndpdGgudGhlLm5ldHdvcmsuc3BlZWQudG8uYWNoaWV2ZS55b3VyLm1haW4udXNhZ2VzLiA9ICJTcGVlZCIpKQ0KDQp0bXB0ZXN0IDwtIHBseXI6OnJlbmFtZShjc3ZfdGVzdCwgYyhTdWJtaXNzaW9uLkRhdGUgPSAiVGltZXN0YW1wIiwgV2lGaS5TU0lEID0gIlNTSUQiLCBEb3dubG9hZC5TcGVlZC4uTWJwcy4gPSAiRExTcGVlZCIsIERvd25sb2FkLlNpemUuLk1CLiA9ICJETFNpemUiLCBVcGxvYWQuU3BlZWQuLk1icHMuID0gIlVQU3BlZWQiLCBVcGxvYWQuU2l6ZS4uTUIuID0gIlVQU2l6ZSIsIFBpbmcuLm1zLiA9ICJQaW5nIiwgSml0dGVyLi5tcy4gPSAiSml0dGVyIiwgTG9zcy4uLi4gPSAiTG9zcyIsIFNpZ25hbC5TdHJlbmd0aC4uZEJtLiA9ICJTaWduYWwiKSkNCg0KYGBgDQoNClBlcmZvcm0gZGF0YSBjbGVhbnNpbmcNCmBgYHtyIERhdGFDbGVhbnNlLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCnRtcHN0dWQgPC0gdG1wc3R1ZFt3aGljaCh0bXBzdHVkJEdlbmRlciA9PSAnJyksIF0NCnRtcHN0dWQkVGltZXN0YW1wIDwtIHRtcHN0dWQkR2VuZGVyIDwtIHRtcHN0dWQkQ29tbWVudCA8LSBOVUxMDQp0bXBzdHVkJFVzYWdlWzddIDwtICJTdHVkeSBhbmQgYXNzaWdubWVudCwgVG9waWMgYW5kIHN1YmplY3QgcmVzZWFyY2gsIENhc3VhbCBicm93c2luZyINCnRtcHN0dWQkVXNhZ2UgPC0gc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKHRtcHN0dWQkVXNhZ2UpLCAiLCIpDQpgYGANCg0KDQpTcGxpdCBVc2FnZSBpbnRvIGxpc3QgYW5kIHRyYW5zcG9zZSBpbnRvIGRhdGFmcmFtZQ0KYGBge3IgVHJhbnNwb3NlLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCmsgPC0gMQ0KDQpSZXNwb25kZW50IDwtIGludGVnZXIoKQ0KUHJvZ3JhbW1lIDwtIGNoYXJhY3RlcigpDQpTU0lEIDwtIGNoYXJhY3RlcigpDQpNYWhhbGxhaCA8LSBjaGFyYWN0ZXIoKQ0KVXNhZ2UgPC0gY2hhcmFjdGVyKCkNClNhdGlzZmFjdGlvbiA8LSBpbnRlZ2VyKCkNCkR1cmF0aW9uIDwtIGNoYXJhY3RlcigpDQpTcGVlZCA8LSBpbnRlZ2VyKCkNCkRpc2Nvbm5lY3RlZCA8LSBjaGFyYWN0ZXIoKQ0KQ292ZXJhZ2UgPC0gY2hhcmFjdGVyKCkNCg0KZm9yKGkgaW4gMTpucm93KHRtcHN0dWQpKQ0Kew0KICBmb3IoaiBpbiAxOjMpDQogIHsNCiAgICBSZXNwb25kZW50W2tdIDwtIGkgIyB0byBpZGVudGlmeSB1bmlxdWUgbnVtYmVyIG9mIHJlc3BvbmRlbnQNCiAgICBQcm9ncmFtbWVba10gPC0gYXMuY2hhcmFjdGVyKHRtcHN0dWQkUHJvZ3JhbW1lW2ldKQ0KICAgIFNTSURba10gPC0gYXMuY2hhcmFjdGVyKHRtcHN0dWQkU1NJRFtpXSkNCiAgICBNYWhhbGxhaFtrXSA8LSBhcy5jaGFyYWN0ZXIodG1wc3R1ZCRNYWhhbGxhaFtpXSkNCiAgICBVc2FnZVtrXSA8LSB0cmltd3ModG1wc3R1ZCRVc2FnZVtbaV1dW2pdKSAjIHRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQ0KICAgIFNhdGlzZmFjdGlvbltrXSA8LSB0bXBzdHVkJFNhdGlzZmFjdGlvbltpXQ0KICAgIER1cmF0aW9uW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJER1cmF0aW9uW2ldKQ0KICAgIFNwZWVkW2tdIDwtIHRtcHN0dWQkU3BlZWRbaV0NCiAgICBEaXNjb25uZWN0ZWRba10gPC0gYXMuY2hhcmFjdGVyKHRtcHN0dWQkRGlzY29ubmVjdGVkW2ldKQ0KICAgIENvdmVyYWdlW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJENvdmVyYWdlW2ldKQ0KICAgIA0KICAgIGsgPC0gayArIDENCiAgfQ0KfQ0KYGBgDQoNCg0KRmluYWxpemVkIGRhdGFmcmFtZSBmcm9tIHByZXZpb3VzIHN0ZXANCmBgYHtyIE1haW5ERiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQpkZnN0dWQgPC0gZGF0YS5mcmFtZShSZXNwb25kZW50LCBQcm9ncmFtbWUsIFNTSUQsIE1haGFsbGFoLCBVc2FnZSwgU2F0aXNmYWN0aW9uLCBEdXJhdGlvbiwgU3BlZWQsIERpc2Nvbm5lY3RlZCwgQ292ZXJhZ2UsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCmBgYA0KDQojIyBPdmVyYWxsIExldmVsIG9mIFNhdGlzZmFjdGlvbg0KDQpCYXIgZ3JhcGggZm9yIG92ZXJhbGwgc2F0aXNmYWN0aW9uDQpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQ0KZGZzYXRpc2ZhY3Rpb24gPC0gY291bnQodW5pcXVlKGRmc3R1ZFssIGMoMSw2KV0pWywgMl0pDQpkZnNhdGlzZmFjdGlvbiR4W2Rmc2F0aXNmYWN0aW9uJHggPT0gMV0gPC0gIlZlcnkgRGlzc2F0aXNmaWVkIg0KZGZzYXRpc2ZhY3Rpb24keFtkZnNhdGlzZmFjdGlvbiR4ID09IDJdIDwtICJEaXNzYXRpc2ZpZWQiDQpkZnNhdGlzZmFjdGlvbiR4W2Rmc2F0aXNmYWN0aW9uJHggPT0gM10gPC0gIlNhdGlzZmllZCINCmRmc2F0aXNmYWN0aW9uJHhbZGZzYXRpc2ZhY3Rpb24keCA9PSA0XSA8LSAiVmVyeSBTYXRpc2ZpZWQiDQoNCnBsb3RfbHkoeCA9IGRmc2F0aXNmYWN0aW9uJHgsIHkgPSBkZnNhdGlzZmFjdGlvbiRmcmVxLCB0eXBlID0gImJhciIpICU+JQ0KbGF5b3V0KHRpdGxlID0gJ092ZXJhbGwgTGV2ZWwgb2YgU2F0aXNmYWN0aW9uJywgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlJlc3BvbmRlbnQiKSwgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlNhdGlzZmFjdGlvbiBMZXZlbCIpKQ0KYGBg